“El universo no está hecho de ‘cosas’, sino de patrones de geometrías interactivas complejas” (Christopher Alexander)
“Un patrón porta la esencia de una solución probada a un problema recurrente en un cierto contexto” (Brad Appleton)
El Lenguaje de Patrones, de Christopher Alexander
El concepto de “lenguaje de patrones” fue introducido en 1977 por el arquitecto Christopher Alexander en su libro “A Pattern Language” (Un lenguaje de patrones). Con el objeto de reducir la complejidad de la arquitectura y hacerla más humana, se propuso identificar y resolver los problemas esenciales que se presentaban en el diseño arquitectónico, creando un nuevo paradigma basado en un conjunto de patrones o soluciones fundamentales y una forma de combinarlos para generar diseños útiles y efectivos. Su método práctico y estructurado puso la arquitectura al alcance de personas no especializadas, para que pudieran diseñar su propia vivienda, sin necesidad de arquitectos.
Alexander se inspiró en los diseños de las antiguas culturas y en las atractivas y armoniosas ciudades medievales. Su método se basa en patrones clásicos, probados en el mundo real, prácticos y bellos. Identificó 15 características geométricas o estructurales recurrentes que las convirtió como fundamento de su método: 1) Niveles de escala; 2) Centros fuertes; 3) Fronteras; 4) Repetición alternante; 5) Espacio positivo; 6) Forma buena; 7) Simetrías locales; 8) Entrelazamiento (interlock) profundo y ambigüedad; 9) Contraste; 10) Gradientes; 11) Rugosidad (roughness); 12) Ecos; 13) El vacío; 14) Simplicidad y calma interior; 15) No separabilidad.
Estas 15 propiedades no son independientes. Se solapan.
A partir de estos 15 características geométricas construyó 253 patrones, que describió en dicho libro, también llamado “libro AIS”, por las iniciales de sus autores: Alexander, Ishikawa y Silverstein (ver Bibliografía). Ejemplos de patrones arquitectónicos utilizados por Alexander son: paseo, galería, patio compartido, estacionamiento, etc. El libro tuvo mucho impacto en su época, y ha sido uno de los libros más vendidos sobre arquitectura. De hecho, se ha convertido en una especie de Biblia de los arquitectos. Otro libro posterior de Alexander que profundiza en el tema de patrones es “The Timeless Way of Building” (El modo intemporal de construir), en el que aboga por una arquitectura en íntima fusión con la naturaleza.
En libros posteriores (serie Nature of Order, La Naturaleza del Orden), Alexander profundizó en los aspectos filosóficos de los patrones. Su concepto central es el de “despliegue creativo”, una metáfora del crecimiento del embrión humano, un proceso de complejidad creciente:
La naturaleza es la totalidad de la vida desplegándose continuamente. El despliegue de una estructura viviente tiene su analogía con el despliegue de edificios y la planificación de ciudades.
Los patrones son procesos y no meros objetos o construcciones inertes. Estos procesos son capaces de generar una estructura viviente.
Las 15 características geométricas caracterizan a los sistemas vivientes.
En un buen diseño está la vida, pues las regiones de espacio se amplifican mutuamente para crear una totalidad superior.
Cada región espacial es un “centro”, que no es una entidad aislada, sino un campo embebido dentro de un sistema superior, con influencias contextuales que decrecen gradualmente. Es un holismo geométrico.
Un buen diseño no puede reducirse a sus elementos constituyentes, sino que los elementos deben considerarse totalidades, cada uno soportándose y amplificándose entre sí en una totalidad entrelazada.
Los patrones son geometrías vivas e interactivas, de tal manera que la vida en el universo no emerge de interacciones complejas de un universo esencialmente muerto, sino más bien, en mayor o menor grado, emerge del puro orden geométrico, de su pura esencia geométrica. En este sentido, Alexander sigue la filosofía de Whitehead, Bergson y otros.
La forma evoluciona en cualquier contexto y está regida por fuerzas intrínsecas que tienen que ver con configuraciones geométricas.
Todo lo que existe contiene vida y el grado (mayor o menor) en que se manifiesta puede determinarse objetivamente mediante el mundo interno (subjetivo).
La belleza es una resonancia entre formas objetivas y sensaciones internas, subjetivas.
Un patrón representa una esencia cualitativa de un problema (que revela su verdadera identidad) y una solución que armoniza y equilibra sus fuerzas internas.
Todos los buenos diseños comparten “la calidad que no se puede nombrar”, algo que no puede ser expresado de manera formal. Estos buenos diseños se pueden calificar como vivos, completos, libres, exactos, objetivos y eternos.
Algunas reflexiones de Alexander:
“Un lenguaje de patrones brinda a todo el que lo utilice el poder de crear una infinita variedad de construcciones nuevas y únicas, de la misma manera que un lenguaje común le brinda el poder de crear una infinita variedad de oraciones”.
“Un patrón describe un problema que ocurre una y otra vez en nuestro entorno, para describir después el núcleo de la solución a ese problema, de tal manera que esa solución pueda ser usada más de un millón de veces sin hacerlo ni siquiera dos veces de la misma forma”.
“Cada patrón es una regla de tres partes, que expresa una relación entre un contexto, un problema y una solución. Como un elemento en el mundo, cada patrón es una relación entre un contexto, un sistema de fuerzas que ocurren repetidamente en ese contexto y una configuración espacial que permite que esas fuerzas se resuelvan entre sí”.
Alexander estableció una nueva teoría de la naturaleza del espacio y la materia y su relación con nuestra conciencia, con nuestra visión del mundo. Su teoría intenta evitar el cisma entre lo objetivo y lo subjetivo.
Los 253 patrones propuestos por Alexander constituyen solo un ejemplo. Cada comunidad o grupo particular debe diseñar un conjunto de patrones propio. Aunque existen también patrones arquetípicos o esenciales, que son patrones comunes a todos los seres humanos.
Con los patrones arquitectónicos se dispone de una visión estructural, de una abstracción de alto nivel, que facilita el trabajo de los diseñadores. Incluso permitiría que los usuarios pudieran realizar sus propios diseños, los adecuados a sus necesidades.
Alexander fue también un pionero de la metodología CAD (diseño asistido por ordenador). Su libro “Notes on the Synthesis of Form” (Notas sobre la Síntesis de la Forma) es un clásico en este campo. También formó parte del grupo de científicos que desarrollaron la Teoría de Sistemas (junto con Herbert Simon).
Aunque Alexander aplicó el lenguaje de patrones al diseño arquitectónico, su sistema ha transcendido la disciplina de la arquitectura, habiendo influido de manera importante en distintos dominios, en los que también se puede aplicar esta filosofía genérica. La idea de lenguaje de patrones es universal, es aplicable a cualquier dominio que requiera una ingeniería de diseño. De hecho, su forma de presentar los patrones ha inspirado a los informáticos, que han aplicado sus ideas creativas al diseño de software. En este sentido se habla de “arquitectura del software”, en lugar de “ingeniería del software”. Alexander tuvo en su época tanta influencia como la programación estructurada de Edsger Dijkstra. También ha influido en el moderno movimiento denominado “Programación Extrema” (eXtreme Programming, XP).
El concepto de patrón
Un patrón (pattern) se pude definir como una unidad de información que captura la esencia de una familia de soluciones relativa a un problema (o conjunto de problemas) dentro de un cierto dominio o contexto.
Un sistema bien estructurado puede sistematizarse mediante patrones. Los patrones se pueden definir a diferentes niveles de abstracción. Tienen las características siguientes:
Ayudan al diseñador a descubrir los problemas más importantes de un dominio.
Sintetizan soluciones probadas, efectivas y útiles. Las soluciones tienen que ser no obvias. Capturan buenas prácticas. Tienen una fuerte base pragmática, producto de la experiencia.
Codifican el conocimiento específico acumulado por la experiencia en un determinado dominio.
Es un sistema efectivo de transmitir experiencia. Reducen la curva de aprendizaje en diseñadores no expertos.
No son una solución en sí mismos, sino que son descripciones de soluciones efectivas, resultado de la experiencia. Los patrones son un punto de partida, no de destino.
El diseño de un sistema está relacionado con la función que tiene que realizar. Es por esto que funciones similares comparten un diseño común, con patrones de diseño similares, permitiendo establecer analogías entre sistemas. Es el viejo principio de “la función crea la forma”.
Lenguaje de patrones
Así como los patrones tienen una semántica y una sintaxis, los patrones de diseño deben de estar relacionados entre sí a través de un lenguaje de patrones. Un lenguaje de patrones se puede definir como un sistema para la descripción de una serie de elementos (patrones) y sus relaciones, de modo que permiten construir buenas soluciones a los diferentes problemas que aparecen en un contexto específico.
Un lenguaje de patrones se compone de un conjunto de patrones básicos y un conjunto de reglas combinatorias de dichos patrones (su gramática).
Un lenguaje de patrones debe tener las características siguientes:
Debe ser fácilmente comprensible.
Debe ser práctico y útil para resolver una categoría de problemas.
Debe aportar una disciplina para la resolución de problemas.
Debe permitir identificar las relaciones entre patrones y facilitar su conexión.
Debe aportar flexibilidad combinatoria, ofreciendo alternativas de diseño.
Un lenguaje de patrones aporta un lenguaje formal común entre especialistas de un dominio, una referencia conceptual del dominio. Es realmente un metalenguaje.
Patrones de software
Los patrones de software se han aplicado a muchas áreas de la informática, aunque principalmente en el diseño de software orientado a objetos. El objetivo es el mismo que en arquitectura: reducir la complejidad, formalizar el conocimiento de buenas soluciones e incluso facilitar el desarrollo de programas a los usuarios.
En 1987 Ward Cunningham y Kent Beck desarrollaron 5 patrones de interacción hombre-ordenador (ver Bibliografía).
El catálogo más famoso de patrones de software está incluido en el libro de Gamma et al. [2002], también llamado “libro GoF” (Gang of Four, la Banda de los Cuatro), por sus cuatro autores. Este libro tuvo un gran impacto en el mundo informático. Empezaron a recopilar patrones en 1990 y lo publicaron en 1994. Incluye 23 patrones divididos en 3 categorías: de creación de objetos, estructurales (adaptador, Bridge, Proxy, etc.) y de comportamiento (observador, visitante, mediador, intérprete, etc.). En el capítulo 2 se presenta un ejemplo de diseño de un editor de textos.
Ward Cunningham ha creado en Internet el Portland Pattern Repository, con cientos de patrones en diferentes campos, incluyendo muchos sobre Programación Extrema (eXtreme Programming).
Otros sistemas de patrones conocidos son el POSA [Buschmann et al., 1996] y el PEAA [Fowler, 2003]. En POSA se consideran tres categorías de sistemas: distribuidos, interactivos y adaptativos. En PEAA se consideran las categorías siguientes: capas, lógica, bases de datos, presentación web, concurrencia, estados de sesión y distribución.
Crítica de los patrones de software
Se ha criticado mucho la utilización de patrones de software. De hecho, el GoF fue sometido a un juicio-espectáculo en el que fueron acusados de “crímenes” contra la informática. Algunas de las críticas son:
No existe un lenguaje formal. Se utiliza un lenguaje natural para su representación.
Muchos patrones no son realmente necesarios porque los lenguajes de alto nivel (como Lisp o Dylan) ya los soportan.
Para usar un patrón hay que copiarlo. No existen mecanismos para etiquetar y catalogar patrones.
Los patrones no son implementables directamente, pues son descripciones abstractas, no detalladas. No son clases ni componentes reutilizables ni herramientas ni generadores de código. Los patrones hay que programarlos en cada aplicación que los utiliza, lo que técnicamente supone un retroceso. De hecho, muchos desarrolladores han convertido los patrones en componentes reutilizables.
Los patrones son excesivamente complejos. Esto quiere decir que el lenguaje de patrones no es suficientemente potente.
La tecnología de patrones está prestada de la arquitectura, cuando en informática ya existen mecanismos de abstracción potentes que no difieren significativamente de los patrones.
Apoyarse excesivamente en los patrones supone alejarse del lenguaje de implementación y dificultar la implementación.
Un lenguaje de alto nivel flexible debe permitir diseñar y construir con patrones, que pueden incluso convertirse en extensiones del propio lenguaje.
La documentación de un patrón es excesiva y demasiado literaria. Incluye aspectos como: nombre, contexto, problema, motivación, patrones relacionados, aplicabilidad, ejemplos, etc.
MENTAL como Lenguaje Universal de Patrones
MENTAL se puede utilizar como lenguaje universal de patrones, por las siguientes razones:
Las primitivas semánticas universales son patrones universales, los patrones de la conciencia. Además de estos patrones universales se pueden crear patrones específicos mediante expresiones genéricas parametrizadas. El número de parámetros de una expresión genérica parametrizada indica su dimensionalidad. Estos patrones específicos son reutilizables.
Se pueden crear patrones de orden superior (patrones de patrones) por combinación de patrones de nivel inferior.
Es aplicable a una gran variedad de dominios, dado su carácter genérico y flexible.
Permite representar todo tipo de expresiones (objetos, clases, procedimientos, funciones, reglas, eventos, etc.).
Permite especificar diferentes niveles de abstracción, desde lo más genérico hasta lo más detallado.
Permite utilizar parámetros en todo tipo de expresiones. Un parámetro no es solo un valor; puede ser cualquier expresión (una regla, un segmento de código, etc.), incluyendo parámetros de orden superior (parámetros de parámetros).
Permite unificar diseño y código ejecutable, es decir, patrones de diseño y de programación (conocimiento y utilidad práctica).
Permite crear patrones del propio lenguaje y patrones de aplicaciones.
Adenda
Antipatrones
Así como los patrones son buenas soluciones a problemas, los antipatrones son malas soluciones a problemas. Los antipatrones también se documentan, pues alertan a los diseñadores para que no escojan caminos erróneos. El libro "AntiPatterns" [Brown et al., 1998] describe muchos antipatrones de software.
Bibliografía
Patrones en arquitectura
Alexander, Christopher. Tres aspectos de matemática y diseño. Tusquets, Barcelona, 1969.
Alexander, Christopher; Ishikawa, Sara; Silverstein, Murray. El lenguaje de patrones. Gustavo Gili, Barcelona, 1980.
Alexander, Christopher. The Oregon Experiment. Oxford University Press, 1975.
Alexander, Christopher. El modo intemporal de construir. Gustavo Gili, Barcelona, 1981.
Alexander, Christopher. The Phenomenon of Life: Nature of Order, Book 1: An Essay on the Art of Building and the Nature of the Universe (The Nature of Order). Center for Environmental Structure, 2004.
Alexander, Christopher. The Process of Creating Life: Nature of Order, Book 2: An Essay on the Art of Building and the Nature of the Universe (The Nature of Order). Center for Environmental Structure, 2004.
Alexander, Christopher. Notes on the Synthesis of Form. Harvard University Press, 2006. Presenta un método para desarrollar la creatividad y crear nuevos conceptos.
Alexander, Christopher. La estructura del medio ambiente. Tusquets, 1980.
Alexander, Christopher. Tres aspectos de matemática y diseño. Tusquets, 1969.
Alexander, Christopher. Ensayo sobre la síntesis de la forma. Editorial Infinito, Buenos Aires, 1969.
Sitio web de Christopher Alexander: www.patternlanguage.com
Patrones de software
Aedo Cuevas, Ignacio. Ingeniería de la web y patrones de diseño. Pearson Alhambra, 2005.
Ambler, Scott W.; Hanscome, Barbara. Process Patterns: Building Large-Scale Systems Using object Technology. Cambridge University Press, 1998.
Brown, William; Malveau, Raphael; McCormick, Skip; Mowbray, Tom. AntiPatterns. Refactoring Software, Architecture and Projects in Crisis. Wiley, 1998.
Buschmann, Frank; Meunier, Regine; Rohnert, Hans; Sommerland, Peter; Stal, Michael. Problem-Oriented Software Architecture. Vol. 1: A System of Patterns. Wiley &Sons, 1996. (El sistema de patrones se denomina POSA, por sus iniciales).